--__newindex是table的情况
local mt0 = {}
local mt1 = setmetatable({}, { __newindex = mt0 })
local mt2 = setmetatable({ key1 = "111"}, { __newindex = mt1 })
local tbl = setmetatable({}, { __newindex = mt2 })
tbl.key = "key"  --赋值操作,触发元方法
tbl.key1 = "222"
print(tbl.key) --nil
print(mt0.key)  --key
print(mt2.key1)  --111

--[[
    nil
    key
    222

    (1)表tbl从来不存在的key域赋值，tbl.key = “key”这个操作会触发元方法
    (2)tbl会到其元表中的__newindex域mt2，查找是否存在key，因为没找到，因此需要去mt1中查找
    (3)mt1中也没找到key，所以要去mt1的元表的__newindex域中去查找，也就是mt0中。
    (4)mt0中也没找到key，但是mt0已经没有metatable，所以直接将”key”的值，赋值到mt0.key中，
    但是tbl.key并没有被赋值
]]